package cn.operation.backend.service.baseArea;


import cn.operation.backend.bo.baseArea.BaseAreaBo;
import cn.operation.backend.bo.baseArea.BaseParentAreaBo;
import cn.operation.backend.query.BaseLnLineQueryConditions;
import cn.operation.backend.util.PageVo;
import cn.operation.base.dto.extdto.baseArea.ScBaseAreaDto;
import cn.operation.base.model.ScBaseArea;

import java.util.List;

/**
 * The interface Base Area Service.
 *
 * @FileName:
 * @Description: 区域信息
 * @author: Felix
 * @date: 2017/5/31.
 */
public interface BaseAreaService {

	/**
	 * 查询所有区域
	 *
	 * @return
	 * @throws Exception
	 */
	List<ScBaseArea> selectAreaListByConditions(PageVo pageVo, BaseAreaBo bo) throws Exception;

	/**
	 * 根据区域ID查询区域信息
	 *
	 * @param id
	 * @param getRidStatus 去除的状态
	 * @return
	 * @throws Exception
	 */
	BaseAreaBo selectById(Integer id, String getRidStatus) throws Exception;

	/**
	 * 根据区域ID或者code查询子区域
	 *
	 * @param pageVo
	 * @param baseAreaBo
	 * @return
	 * @throws Exception
	 */
	List<ScBaseArea> getChildAreaListByIdOrCode(PageVo pageVo, BaseAreaBo baseAreaBo) throws Exception;

	/**
	 * 根据区域ID查询子区域
	 *
	 * @return
	 * @throws Exception
	 */
	List<ScBaseArea> getChildAreaListById(PageVo pageVo, Integer id) throws Exception;

	/**
	 * 查询所有省级区域
	 *
	 * @return
	 * @throws Exception
	 */
	List<BaseAreaBo> getAllProvinceArea() throws Exception;

	/**
	 * 查询所有市级区域
	 *
	 * @return
	 * @throws Exception
	 */
	List<BaseAreaBo> getAllCityArea() throws Exception;

	/**
	 * 根据省级区域查询其下市级区域和县级区域
	 *
	 * @return
	 * @throws Exception
	 */
	List<ScBaseArea> getCityAndCountyAreaList(PageVo pageVo, BaseAreaBo baseAreaBo) throws Exception;

	/**
	 * 查询渠道线路起点区域
	 *
	 * @param pageVo
	 * @param conditions
	 * @return
	 * @throws Exception
	 */
	List<ScBaseArea> queryStartArea(PageVo pageVo, BaseLnLineQueryConditions conditions) throws Exception;

	Integer queryStartAreaCount(BaseLnLineQueryConditions conditions) throws Exception;

	/**
	 * 线路状态“正常”、是渠道线路并且起点区域等于输入参数的终点省份
	 *
	 * @param pageVo
	 * @param conditions
	 * @return
	 * @throws Exception
	 */
	List<ScBaseArea> queryEndProvince(PageVo pageVo, BaseLnLineQueryConditions conditions) throws Exception;

	Integer queryEndProvinceCount(BaseLnLineQueryConditions conditions) throws Exception;

	/**
	 * 线路状态“正常”、是渠道线路并且起点区域、终点省份等于输入参数的终点
	 *
	 * @param pageVo
	 * @param conditions
	 * @return
	 * @throws Exception
	 */
	List<ScBaseArea> queryEndArea(PageVo pageVo, BaseLnLineQueryConditions conditions) throws Exception;

	Integer queryEndAreaCount(BaseLnLineQueryConditions conditions) throws Exception;

	/**
	 * 区划等级 所有城市
	 *
	 * @param city
	 * @return
	 * @throws Exception
	 */
	List<ScBaseArea> selectAllCity(String city) throws Exception;

	/**
	 * 修改运载工具
	 *
	 * @param
	 * @param
	 * @return
	 */
	ScBaseArea updateArea(BaseAreaBo areaBO) throws Exception;

	/**
	 * 根据区域code查找区域信息
	 *
	 * @param code
	 * @return
	 */
	ScBaseArea selectByCode(String code);

	/**
	 * 根据区域id或者编码查询区域信息
	 */
	List<ScBaseArea> selectAreByIdOrCode(BaseAreaBo conditions) throws Exception;

	/**
	 *
	 */
	void addArea(BaseAreaBo areaBO) throws Exception;

	/**
	 * @Title: deleteByIds @Description: 根据ids删除区域信息 @param @param ids @return
	 * void 返回类型 @throws
	 */
	void deleteByIds(String ids);

	/**
	 * @Title: list @Description: 列表查询 @param @param
	 * areaBO @param @return @return List<ScBaseArea> 返回类型 @throws
	 */
	List<ScBaseArea> list(BaseAreaBo areaBO);

	/**
	 * @Title: getAreaTree @Description: 获取区域树 @param @return @return
	 * List<BaseAreaBO> 返回类型 @throws
	 */
	List<BaseAreaBo> getAreaTree();

	/**
	 * 根据区域id或code查询其下行区域
	 * @param baseAreaBo
	 * @return
	 * @throws Exception
	 */
   /* List<ScBaseAreaDto> selectTreeByparentId(BaseAreaBo baseAreaBo) throws Exception;*/

	/**
	 * 根据区域id或code查询其上行行区域
	 *
	 * @param baseAreaBo
	 * @return
	 * @throws Exception
	 */
	BaseParentAreaBo getParenAreaList(BaseAreaBo baseAreaBo) throws Exception;

	/**
	 * 根据parentId查询市级区域
	 *
	 * @param id
	 * @return
	 */
	List<ScBaseArea> getCityAreaByParentId(Integer id);

	/**
	 * 根据parentId查询区级对象
	 *
	 * @param id
	 * @return
	 */
	List<ScBaseArea> getCountyArea(Integer id);

	/**
	 * 返回tree对象
	 *
	 * @param id
	 * @return
	 */
	List<ScBaseArea> selectTree(Integer id);

	List<ScBaseArea> selectAllAreaLevel();

	/**
	 * 返回所有市级区域
	 *
	 * @return
	 */
	List<ScBaseArea> findAllCiyt();

	List<ScBaseArea> queryStartCity(Integer areaKeyword) throws Exception;
}
